S3 バケットのオブジェクト数が S3 コンソールと AWS CLI で合わないのはなぜでしょうか?
困っていた内容
S3 バケットのオブジェクト数を確認したところ、S3 コンソールと AWS CLI で違う値になるのですが、なぜでしょうか?
S3 コンソール
S3 コンソールのメトリクスタブからオブジェクトの合計数を確認すると 7 と表示される。
AWS CLI
ls
コマンドでオブジェクトの合計数を確認すると 5 と表示される。
$ aws s3 ls s3://test-20210913-ver --recursive --human-readable --summarize 2021-09-13 10:20:51 131.5 KiB S3①.png 2021-09-13 10:20:52 192.9 KiB S3②.png 2021-09-13 10:17:55 116.5 KiB S3③.png 2021-09-13 10:17:55 136.8 KiB S3④.png 2021-09-13 10:17:56 155.2 KiB S3⑤.png Total Objects: 5 Total Size: 732.8 KiB
どうして違う結果になるの?
この S3 バケットでは、バージョニングが有効化されており、最新のオブジェクトが 5 つと最新でないオブジェクトが 2 つ保存されています。
S3 コンソールでは最新でないオブジェクトを含むすべてのオブジェクト数を表示する一方で、
AWS CLI のls
コマンドは最新バージョンのオブジェクト数のみを返却するという仕様のためにそれぞれ異なる結果が表示されます。
※ S3 コンソールで確認できるオブジェクトの合計数は NumberOfObjects メトリクスを反映しています。
NumberOfObjects
すべてのストレージクラスのバケットに保存されたオブジェクトの総数。この値を計算するには、バケット内のすべてのオブジェクト (最新のオブジェクトと最新でないオブジェクトの両方) と、バケットに対するすべての不完全なマルチパートアップロードの合計パート数をカウントします。
sync コマンドの場合はどうなる?
バージョニングを有効化しているバケットのオブジェクトをsync
コマンドを実行して別のバケットにコピーした場合、最新バージョンのオブジェクトのみがコピーされます。
$ aws s3 sync s3://test-20210913-ver s3://copy-20210917-test copy: s3://test-20210913-ver/S3①.png to s3://copy-20210917-test/S3①.png copy: s3://test-20210913-ver/S3③.png to s3://copy-20210917-test/S3③.png copy: s3://test-20210913-ver/S3②.png to s3://copy-20210917-test/S3②.png copy: s3://test-20210913-ver/S3⑤.png to s3://copy-20210917-test/S3⑤.png copy: s3://test-20210913-ver/S3④.png to s3://copy-20210917-test/S3④.png $ aws s3 ls s3://copy-20210917-test --recursive --human-readable --summarize 2021-09-17 09:59:48 131.5 KiB S3①.png 2021-09-17 09:59:48 192.9 KiB S3②.png 2021-09-17 09:59:48 116.5 KiB S3③.png 2021-09-17 09:59:48 136.8 KiB S3④.png 2021-09-17 09:59:48 155.2 KiB S3⑤.png Total Objects: 5 Total Size: 732.8 KiB